###change

library(leaflet)
library(readxl)
library(dplyr)
library(reticulate)
maindata <- read_excel("maindata.xlsx")
tmp=maindata

Let look at how many unique values each column has

sapply(maindata, function(x) length(unique(x)))
                    id              log_price          property_type              room_type 
                 74111                    767                     35                      3 
             amenities           accommodates              bathrooms               bed_type 
                 67122                     16                     18                      5 
   cancellation_policy           cleaning_fee                   city            Description 
                     5                      2                      6                  73469 
          first_review   host_has_profile_pic host_identity_verified     host_response_rate 
                  2555                      3                      3                     81 
            host_since       instant_bookable            last_review                    lat 
                  3088                      2                   1372                  74058 
                  long                   name          neighbourhood      number_of_reviews 
                 73973                  73331                    620                    371 
  review_scores_rating          thumbnail_url                zipcode               bedrooms 
                    55                  65884                    669                     12 
                  beds 
                    19 
maindata %>% group_by(cancellation_policy) %>% select(cancellation_policy)%>% unique()
count(maindata, cancellation_policy) %>% mutate(relative_freq=(n/sum(n)))
maindata %>% group_by(bed_type) %>% select(bed_type)%>% unique()
library(dplyr)
maindata %>% select(property_type) %>% count(property_type) %>% mutate(relative_freq=(n/sum(n)))
maindata %>% filter(city=="NYC") %>% select(bed_type) %>% count(bed_type) %>% mutate(relative_freq=(n/sum(n)))
library(ggplot2)
maindata%>% ggplot( aes(x=cancellation_policy, y=log_price))+ geom_boxplot()+ ggtitle( "Boxplot for log_price vs cancellation policy")

ggplot(maindata, aes(x=bed_type, y=log_price))+ geom_boxplot()+ ggtitle( "Boxplot for log_price vs bed type")

ggplot(maindata, aes(x=cleaning_fee, y=log_price))+ geom_boxplot()+ ggtitle( "Boxplot for log_price vs cleaning fee")

Do some hypothesis testing.

vcd::mosaic(~cleaning_fee+instant_bookable, data=maindata, shade=TRUE)

First, let us plot the different properties, using the latitude and longitude information given in our dataset.

m <- leaflet(tmp) %>%
addTiles() %>%
addProviderTiles("OpenStreetMap.BZH") %>%
addCircleMarkers(~long, ~lat, color = "red",
stroke=FALSE)
m

From the map above, we can see that the properties listed in our datset are from six different locations: Los Angeles, New York, DC, Boston, Chicago, San Fransico etc.

log_price for th different cities.

NYC


rows = (maindata$city== "NYC") 
tmp = maindata[rows, ]

mybins <- seq(2, 8, by=1.5)
mypalette <- colorBin( palette="YlOrBr",
domain=tmp$log_price,
na.color="transparent",
bins=mybins)

m <- leaflet(tmp) %>%
addTiles() %>%
addProviderTiles("OpenStreetMap.BZH") %>%
addCircleMarkers(~long, ~lat,radius = ~log_price,
fillColor = ~mypalette(log_price),
fillOpacity = 0.5,
color = "white",stroke=FALSE
)%>%
addLegend( pal=mypalette, values=~log_price, opacity=0.9,
title = "Log_price", position = "bottomright" )
m

Talk about which part of NYC has higher log_price and which part has lowest.

Boston.


rows = (maindata$city== "Boston") 
tmp = maindata[rows, ]

mybins <- seq(2, 8, by=1.5)
mypalette <- colorBin( palette="YlOrBr",
domain=tmp$log_price,
na.color="transparent",
bins=mybins)

m <- leaflet(tmp) %>%
addTiles() %>%
addProviderTiles("OpenStreetMap.BZH") %>%
addCircleMarkers(~long, ~lat,radius = ~log_price,
fillColor = ~mypalette(log_price),
fillOpacity = 0.5,
color = "white",stroke=FALSE
)%>%
addLegend( pal=mypalette, values=~log_price, opacity=0.9,
title = "Log_price", position = "bottomright" )
m

DC


rows = (maindata$city== "DC") 
tmp = maindata[rows, ]

mybins <- seq(2, 8, by=1.5)
mypalette <- colorBin( palette="YlOrBr",
domain=tmp$log_price,
na.color="transparent",
bins=mybins)

m <- leaflet(tmp) %>%
addTiles() %>%
addProviderTiles("OpenStreetMap.BZH") %>%
addCircleMarkers(~long, ~lat,radius = ~log_price,
fillColor = ~mypalette(log_price),
fillOpacity = 0.5,
color = "white",stroke=FALSE
)%>%
addLegend( pal=mypalette, values=~log_price, opacity=0.9,
title = "Log_price", position = "bottomright" )
m

San Francisco.


rows = (maindata$city== "SF") 
tmp = maindata[rows, ]

mybins <- seq(2, 8, by=1.5)
mypalette <- colorBin( palette="YlOrBr",
domain=tmp$log_price,
na.color="transparent",
bins=mybins)

m <- leaflet(tmp) %>%
addTiles() %>%
addProviderTiles("OpenStreetMap.BZH") %>%
addCircleMarkers(~long, ~lat,radius = ~log_price,
fillColor = ~mypalette(log_price),
fillOpacity = 0.5,
color = "white",stroke=FALSE
)%>%
addLegend( pal=mypalette, values=~log_price, opacity=0.9,
title = "Log_price", position = "bottomright" )
m

LA


rows = (maindata$city== "LA") 
tmp = maindata[rows, ]

mybins <- seq(2, 8, by=1.5)
mypalette <- colorBin( palette="YlOrBr",
domain=tmp$log_price,
na.color="transparent",
bins=mybins)

m <- leaflet(tmp) %>%
addTiles() %>%
addProviderTiles("OpenStreetMap.BZH") %>%
addCircleMarkers(~long, ~lat,radius = ~log_price,
fillColor = ~mypalette(log_price),
fillOpacity = 0.5,
color = "white",stroke=FALSE
)%>%
addLegend( pal=mypalette, values=~log_price, opacity=0.9,
title = "Log_price", position = "bottomright" )
m

We can see that along the edge there are properties that are high priced.

Chicago


rows = (maindata$city== "Chicago") 
tmp = maindata[rows, ]

mybins <- seq(2, 8, by=1.5)
mypalette <- colorBin( palette="YlOrBr",
domain=tmp$log_price,
na.color="transparent",
bins=mybins)

m <- leaflet(tmp) %>%
addTiles() %>%
addProviderTiles("OpenStreetMap.BZH") %>%
addCircleMarkers(~long, ~lat,radius = ~log_price,
fillColor = ~mypalette(log_price),
fillOpacity = 0.5,
color = "white",stroke=FALSE
)%>%
addLegend( pal=mypalette, values=~log_price, opacity=0.9,
title = "Log_price", position = "bottomright" )
m

Types of property

rows = (maindata$city== "Chicago") 
tmp = maindata[rows, ]

mybins <- seq(2, 8, by=1.5)
mypalette <- colorBin( palette="YlOrBr",
domain=tmp$property_type,
na.color="transparent",
bins=mybins)

m <- leaflet(tmp) %>%
addTiles() %>%
addProviderTiles("OpenStreetMap.BZH") %>%
addCircleMarkers(~longitute, ~latitude,radius = ~log_price,
fillColor = ~mypalette(property_type),
fillOpacity = 0.5,
color = "white",stroke=FALSE
)%>%
addLegend( pal=mypalette, values=~property_type, opacity=0.9,
title = "Property type", position = "bottomright" )
Error in eval(f[[2]], metaData(data), environment(f)) : 
  object 'longitute' not found
LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKIyMjY2hhbmdlCgpgYGB7cn0KbGlicmFyeShsZWFmbGV0KQpsaWJyYXJ5KHJlYWR4bCkKbGlicmFyeShkcGx5cikKbGlicmFyeShyZXRpY3VsYXRlKQpgYGAKCgpgYGB7cn0KbWFpbmRhdGEgPC0gcmVhZF9leGNlbCgibWFpbmRhdGEueGxzeCIpCnRtcD1tYWluZGF0YQpgYGAKCkxldCBsb29rIGF0IGhvdyBtYW55IHVuaXF1ZSB2YWx1ZXMgZWFjaCBjb2x1bW4gaGFzCgpgYGB7cn0Kc2FwcGx5KG1haW5kYXRhLCBmdW5jdGlvbih4KSBsZW5ndGgodW5pcXVlKHgpKSkKYGBgCgpgYGB7cn0KbWFpbmRhdGEgJT4lIGdyb3VwX2J5KGNhbmNlbGxhdGlvbl9wb2xpY3kpICU+JSBzZWxlY3QoY2FuY2VsbGF0aW9uX3BvbGljeSklPiUgdW5pcXVlKCkKYGBgCmBgYHtyfQpjb3VudChtYWluZGF0YSwgY2FuY2VsbGF0aW9uX3BvbGljeSkgJT4lIG11dGF0ZShyZWxhdGl2ZV9mcmVxPShuL3N1bShuKSkpCmBgYAoKCmBgYHtyfQptYWluZGF0YSAlPiUgZ3JvdXBfYnkoYmVkX3R5cGUpICU+JSBzZWxlY3QoYmVkX3R5cGUpJT4lIHVuaXF1ZSgpCmBgYAoKYGBge3J9CmxpYnJhcnkoZHBseXIpCm1haW5kYXRhICU+JSBzZWxlY3QocHJvcGVydHlfdHlwZSkgJT4lIGNvdW50KHByb3BlcnR5X3R5cGUpICU+JSBtdXRhdGUocmVsYXRpdmVfZnJlcT0obi9zdW0obikpKQpgYGAKCgpgYGB7cn0KbWFpbmRhdGEgJT4lIGZpbHRlcihjaXR5PT0iTllDIikgJT4lIHNlbGVjdChiZWRfdHlwZSkgJT4lIGNvdW50KGJlZF90eXBlKSAlPiUgbXV0YXRlKHJlbGF0aXZlX2ZyZXE9KG4vc3VtKG4pKSkKYGBgCgoKYGBge3J9CmxpYnJhcnkoZ2dwbG90MikKbWFpbmRhdGElPiUgZ2dwbG90KCBhZXMoeD1jYW5jZWxsYXRpb25fcG9saWN5LCB5PWxvZ19wcmljZSkpKyBnZW9tX2JveHBsb3QoKSsgZ2d0aXRsZSggIkJveHBsb3QgZm9yIGxvZ19wcmljZSB2cyBjYW5jZWxsYXRpb24gcG9saWN5IikKYGBgCgpgYGB7cn0KZ2dwbG90KG1haW5kYXRhLCBhZXMoeD1iZWRfdHlwZSwgeT1sb2dfcHJpY2UpKSsgZ2VvbV9ib3hwbG90KCkrIGdndGl0bGUoICJCb3hwbG90IGZvciBsb2dfcHJpY2UgdnMgYmVkIHR5cGUiKQpgYGAKCmBgYHtyfQpnZ3Bsb3QobWFpbmRhdGEsIGFlcyh4PWNsZWFuaW5nX2ZlZSwgeT1sb2dfcHJpY2UpKSsgZ2VvbV9ib3hwbG90KCkrIGdndGl0bGUoICJCb3hwbG90IGZvciBsb2dfcHJpY2UgdnMgY2xlYW5pbmcgZmVlIikKYGBgCkRvIHNvbWUgaHlwb3RoZXNpcyB0ZXN0aW5nLgoKYGBge3J9CnZjZDo6bW9zYWljKH5jbGVhbmluZ19mZWUraW5zdGFudF9ib29rYWJsZSwgZGF0YT1tYWluZGF0YSwgc2hhZGU9VFJVRSkKYGBgCgoKRmlyc3QsIGxldCB1cyBwbG90IHRoZSBkaWZmZXJlbnQgcHJvcGVydGllcywgdXNpbmcgdGhlIGxhdGl0dWRlIGFuZCBsb25naXR1ZGUgaW5mb3JtYXRpb24gZ2l2ZW4gaW4gb3VyIGRhdGFzZXQuIApgYGB7cn0KbSA8LSBsZWFmbGV0KHRtcCkgJT4lCmFkZFRpbGVzKCkgJT4lCmFkZFByb3ZpZGVyVGlsZXMoIk9wZW5TdHJlZXRNYXAuQlpIIikgJT4lCmFkZENpcmNsZU1hcmtlcnMofmxvbmcsIH5sYXQsIGNvbG9yID0gInJlZCIsCnN0cm9rZT1GQUxTRSkKbQpgYGAKRnJvbSB0aGUgbWFwIGFib3ZlLCB3ZSBjYW4gc2VlIHRoYXQgdGhlIHByb3BlcnRpZXMgbGlzdGVkIGluIG91ciBkYXRzZXQgYXJlIGZyb20gc2l4IGRpZmZlcmVudCBsb2NhdGlvbnM6IExvcyBBbmdlbGVzLCBOZXcgWW9yaywgREMsIEJvc3RvbiwgQ2hpY2FnbywgU2FuIEZyYW5zaWNvIGV0Yy4gCgoKIyMgbG9nX3ByaWNlIGZvciB0aCBkaWZmZXJlbnQgY2l0aWVzLiAKCgojIyMgTllDIAoKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KCnJvd3MgPSAobWFpbmRhdGEkY2l0eT09ICJOWUMiKSAKdG1wID0gbWFpbmRhdGFbcm93cywgXQoKbXliaW5zIDwtIHNlcSgyLCA4LCBieT0xLjUpCm15cGFsZXR0ZSA8LSBjb2xvckJpbiggcGFsZXR0ZT0iWWxPckJyIiwKZG9tYWluPXRtcCRsb2dfcHJpY2UsCm5hLmNvbG9yPSJ0cmFuc3BhcmVudCIsCmJpbnM9bXliaW5zKQoKbSA8LSBsZWFmbGV0KHRtcCkgJT4lCmFkZFRpbGVzKCkgJT4lCmFkZFByb3ZpZGVyVGlsZXMoIk9wZW5TdHJlZXRNYXAuQlpIIikgJT4lCmFkZENpcmNsZU1hcmtlcnMofmxvbmcsIH5sYXQscmFkaXVzID0gfmxvZ19wcmljZSwKZmlsbENvbG9yID0gfm15cGFsZXR0ZShsb2dfcHJpY2UpLApmaWxsT3BhY2l0eSA9IDAuNSwKY29sb3IgPSAid2hpdGUiLHN0cm9rZT1GQUxTRQopJT4lCmFkZExlZ2VuZCggcGFsPW15cGFsZXR0ZSwgdmFsdWVzPX5sb2dfcHJpY2UsIG9wYWNpdHk9MC45LAp0aXRsZSA9ICJMb2dfcHJpY2UiLCBwb3NpdGlvbiA9ICJib3R0b21yaWdodCIgKQptCmBgYAoKVGFsayBhYm91dCB3aGljaCBwYXJ0IG9mIE5ZQyBoYXMgaGlnaGVyIGxvZ19wcmljZSBhbmQgd2hpY2ggcGFydCBoYXMgbG93ZXN0LiAKCiMjIyBCb3N0b24uCgpgYGB7cn0KCnJvd3MgPSAobWFpbmRhdGEkY2l0eT09ICJCb3N0b24iKSAKdG1wID0gbWFpbmRhdGFbcm93cywgXQoKbXliaW5zIDwtIHNlcSgyLCA4LCBieT0xLjUpCm15cGFsZXR0ZSA8LSBjb2xvckJpbiggcGFsZXR0ZT0iWWxPckJyIiwKZG9tYWluPXRtcCRsb2dfcHJpY2UsCm5hLmNvbG9yPSJ0cmFuc3BhcmVudCIsCmJpbnM9bXliaW5zKQoKbSA8LSBsZWFmbGV0KHRtcCkgJT4lCmFkZFRpbGVzKCkgJT4lCmFkZFByb3ZpZGVyVGlsZXMoIk9wZW5TdHJlZXRNYXAuQlpIIikgJT4lCmFkZENpcmNsZU1hcmtlcnMofmxvbmcsIH5sYXQscmFkaXVzID0gfmxvZ19wcmljZSwKZmlsbENvbG9yID0gfm15cGFsZXR0ZShsb2dfcHJpY2UpLApmaWxsT3BhY2l0eSA9IDAuNSwKY29sb3IgPSAid2hpdGUiLHN0cm9rZT1GQUxTRQopJT4lCmFkZExlZ2VuZCggcGFsPW15cGFsZXR0ZSwgdmFsdWVzPX5sb2dfcHJpY2UsIG9wYWNpdHk9MC45LAp0aXRsZSA9ICJMb2dfcHJpY2UiLCBwb3NpdGlvbiA9ICJib3R0b21yaWdodCIgKQptCmBgYAoKCgojIyMgREMKCmBgYHtyfQoKcm93cyA9IChtYWluZGF0YSRjaXR5PT0gIkRDIikgCnRtcCA9IG1haW5kYXRhW3Jvd3MsIF0KCm15YmlucyA8LSBzZXEoMiwgOCwgYnk9MS41KQpteXBhbGV0dGUgPC0gY29sb3JCaW4oIHBhbGV0dGU9IllsT3JCciIsCmRvbWFpbj10bXAkbG9nX3ByaWNlLApuYS5jb2xvcj0idHJhbnNwYXJlbnQiLApiaW5zPW15YmlucykKCm0gPC0gbGVhZmxldCh0bXApICU+JQphZGRUaWxlcygpICU+JQphZGRQcm92aWRlclRpbGVzKCJPcGVuU3RyZWV0TWFwLkJaSCIpICU+JQphZGRDaXJjbGVNYXJrZXJzKH5sb25nLCB+bGF0LHJhZGl1cyA9IH5sb2dfcHJpY2UsCmZpbGxDb2xvciA9IH5teXBhbGV0dGUobG9nX3ByaWNlKSwKZmlsbE9wYWNpdHkgPSAwLjUsCmNvbG9yID0gIndoaXRlIixzdHJva2U9RkFMU0UKKSU+JQphZGRMZWdlbmQoIHBhbD1teXBhbGV0dGUsIHZhbHVlcz1+bG9nX3ByaWNlLCBvcGFjaXR5PTAuOSwKdGl0bGUgPSAiTG9nX3ByaWNlIiwgcG9zaXRpb24gPSAiYm90dG9tcmlnaHQiICkKbQpgYGAKCgojIyMgIFNhbiBGcmFuY2lzY28uIAoKYGBge3J9Cgpyb3dzID0gKG1haW5kYXRhJGNpdHk9PSAiU0YiKSAKdG1wID0gbWFpbmRhdGFbcm93cywgXQoKbXliaW5zIDwtIHNlcSgyLCA4LCBieT0xLjUpCm15cGFsZXR0ZSA8LSBjb2xvckJpbiggcGFsZXR0ZT0iWWxPckJyIiwKZG9tYWluPXRtcCRsb2dfcHJpY2UsCm5hLmNvbG9yPSJ0cmFuc3BhcmVudCIsCmJpbnM9bXliaW5zKQoKbSA8LSBsZWFmbGV0KHRtcCkgJT4lCmFkZFRpbGVzKCkgJT4lCmFkZFByb3ZpZGVyVGlsZXMoIk9wZW5TdHJlZXRNYXAuQlpIIikgJT4lCmFkZENpcmNsZU1hcmtlcnMofmxvbmcsIH5sYXQscmFkaXVzID0gfmxvZ19wcmljZSwKZmlsbENvbG9yID0gfm15cGFsZXR0ZShsb2dfcHJpY2UpLApmaWxsT3BhY2l0eSA9IDAuNSwKY29sb3IgPSAid2hpdGUiLHN0cm9rZT1GQUxTRQopJT4lCmFkZExlZ2VuZCggcGFsPW15cGFsZXR0ZSwgdmFsdWVzPX5sb2dfcHJpY2UsIG9wYWNpdHk9MC45LAp0aXRsZSA9ICJMb2dfcHJpY2UiLCBwb3NpdGlvbiA9ICJib3R0b21yaWdodCIgKQptCmBgYAoKCiMjIyBMQQoKYGBge3J9Cgpyb3dzID0gKG1haW5kYXRhJGNpdHk9PSAiTEEiKSAKdG1wID0gbWFpbmRhdGFbcm93cywgXQoKbXliaW5zIDwtIHNlcSgyLCA4LCBieT0xLjUpCm15cGFsZXR0ZSA8LSBjb2xvckJpbiggcGFsZXR0ZT0iWWxPckJyIiwKZG9tYWluPXRtcCRsb2dfcHJpY2UsCm5hLmNvbG9yPSJ0cmFuc3BhcmVudCIsCmJpbnM9bXliaW5zKQoKbSA8LSBsZWFmbGV0KHRtcCkgJT4lCmFkZFRpbGVzKCkgJT4lCmFkZFByb3ZpZGVyVGlsZXMoIk9wZW5TdHJlZXRNYXAuQlpIIikgJT4lCmFkZENpcmNsZU1hcmtlcnMofmxvbmcsIH5sYXQscmFkaXVzID0gfmxvZ19wcmljZSwKZmlsbENvbG9yID0gfm15cGFsZXR0ZShsb2dfcHJpY2UpLApmaWxsT3BhY2l0eSA9IDAuNSwKY29sb3IgPSAid2hpdGUiLHN0cm9rZT1GQUxTRQopJT4lCmFkZExlZ2VuZCggcGFsPW15cGFsZXR0ZSwgdmFsdWVzPX5sb2dfcHJpY2UsIG9wYWNpdHk9MC45LAp0aXRsZSA9ICJMb2dfcHJpY2UiLCBwb3NpdGlvbiA9ICJib3R0b21yaWdodCIgKQptCmBgYAoKCldlIGNhbiBzZWUgdGhhdCBhbG9uZyB0aGUgZWRnZSB0aGVyZSBhcmUgcHJvcGVydGllcyB0aGF0IGFyZSBoaWdoIHByaWNlZC4gCgoKIyMjIENoaWNhZ28KCmBgYHtyfQoKcm93cyA9IChtYWluZGF0YSRjaXR5PT0gIkNoaWNhZ28iKSAKdG1wID0gbWFpbmRhdGFbcm93cywgXQoKbXliaW5zIDwtIHNlcSgyLCA4LCBieT0xLjUpCm15cGFsZXR0ZSA8LSBjb2xvckJpbiggcGFsZXR0ZT0iWWxPckJyIiwKZG9tYWluPXRtcCRsb2dfcHJpY2UsCm5hLmNvbG9yPSJ0cmFuc3BhcmVudCIsCmJpbnM9bXliaW5zKQoKbSA8LSBsZWFmbGV0KHRtcCkgJT4lCmFkZFRpbGVzKCkgJT4lCmFkZFByb3ZpZGVyVGlsZXMoIk9wZW5TdHJlZXRNYXAuQlpIIikgJT4lCmFkZENpcmNsZU1hcmtlcnMofmxvbmcsIH5sYXQscmFkaXVzID0gfmxvZ19wcmljZSwKZmlsbENvbG9yID0gfm15cGFsZXR0ZShsb2dfcHJpY2UpLApmaWxsT3BhY2l0eSA9IDAuNSwKY29sb3IgPSAid2hpdGUiLHN0cm9rZT1GQUxTRQopJT4lCmFkZExlZ2VuZCggcGFsPW15cGFsZXR0ZSwgdmFsdWVzPX5sb2dfcHJpY2UsIG9wYWNpdHk9MC45LAp0aXRsZSA9ICJMb2dfcHJpY2UiLCBwb3NpdGlvbiA9ICJib3R0b21yaWdodCIgKQptCmBgYAoKIyMgVHlwZXMgb2YgcHJvcGVydHkgCgpgYGB7cn0Kcm93cyA9IChtYWluZGF0YSRjaXR5PT0gIkNoaWNhZ28iKSAKdG1wID0gbWFpbmRhdGFbcm93cywgXQoKbXliaW5zIDwtIHNlcSgyLCA4LCBieT0xLjUpCm15cGFsZXR0ZSA8LSBjb2xvckJpbiggcGFsZXR0ZT0iWWxPckJyIiwKZG9tYWluPXRtcCRwcm9wZXJ0eV90eXBlLApuYS5jb2xvcj0idHJhbnNwYXJlbnQiLApiaW5zPW15YmlucykKCm0gPC0gbGVhZmxldCh0bXApICU+JQphZGRUaWxlcygpICU+JQphZGRQcm92aWRlclRpbGVzKCJPcGVuU3RyZWV0TWFwLkJaSCIpICU+JQphZGRDaXJjbGVNYXJrZXJzKH5sb25naXR1dGUsIH5sYXRpdHVkZSxyYWRpdXMgPSB+bG9nX3ByaWNlLApmaWxsQ29sb3IgPSB+bXlwYWxldHRlKHByb3BlcnR5X3R5cGUpLApmaWxsT3BhY2l0eSA9IDAuNSwKY29sb3IgPSAid2hpdGUiLHN0cm9rZT1GQUxTRQopJT4lCmFkZExlZ2VuZCggcGFsPW15cGFsZXR0ZSwgdmFsdWVzPX5wcm9wZXJ0eV90eXBlLCBvcGFjaXR5PTAuOSwKdGl0bGUgPSAiUHJvcGVydHkgdHlwZSIsIHBvc2l0aW9uID0gImJvdHRvbXJpZ2h0IiApCm0KbWF4KG1haW5kYXRhJGxvZ19wcmljZSkKYGBgCgo=